<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>纯函数概念理解(Understanding the concept of pure functions)</title>
  <!-- 
  在JavaScript及其他编程语言中，纯函数（Pure Function）是一个重要的概念，尤其在函数式编程中。
  一、纯函数的定义
  纯函数是指在相同的输入下，总是返回相同的输出，并且没有任何副作用的函数。换句话说，纯函数的行为只依赖于其输入参数，而不依赖于外部状态。

  二、纯函数的特点
  1. 相同输入相同输出：
    - 纯函数对于相同的输入参数，总是返回相同的结果。这意味着函数的输出完全由输入决定。
    function add(a, b) {
        return a + b;
    }

    console.log(add(2, 3)); // 输出: 5
    console.log(add(2, 3)); // 输出: 5
  2. 没有副作用：
    - 纯函数不会修改外部状态或产生任何副作用。例如，它不会修改全局变量、输出到控制台、写入文件或改变输入参数。
    let count = 0;

    function increment(x) {
        return x + 1; // 纯函数，不修改外部变量
    }

    console.log(increment(count)); // 输出: 1
    console.log(count); // 输出: 0，外部变量未被改变
  三、纯函数的优点
  1. 可预测性：
    - 由于纯函数的输出仅依赖于输入，开发者可以轻松预测函数的行为，减少调试和测试的复杂性。
  2. 可重用性：
    - 纯函数易于重用，因为它们没有依赖于特定的外部状态。
  3. 易于测试：
    - 纯函数可以独立于其他代码进行单元测试，测试用例可以简单地通过输入和期望输出进行验证。
  4. 支持函数式编程：
    - 纯函数是函数式编程的核心概念，有助于编写更简洁和可维护的代码。

  四、总结
  - 纯函数是指在相同输入下总是返回相同输出，并且没有副作用的函数。
  - 纯函数的特点包括可预测性、可重用性和易于测试。
  - 理解纯函数的概念有助于开发者写出更高质量的代码，尤其是在函数式编程的环境中。
   -->
</head>
<body>

  <script>
    // 1. 相同输入相同输出
    function add(a, b) {
      return a + b;
    }

    console.log(add(2, 3)); // 输出: 5
    console.log(add(2, 3)); // 输出: 5

    // 2. 没有副作用
    let count = 0;

    function increment(x) {
      return x + 1; // 纯函数，不修改外部变量
    }

    console.log(increment(count)); // 输出: 1
    console.log(count); // 输出: 0，外部变量未被改变

    // 3. 不是一个纯函数
    var address = "广州市"
    function printInfo(info) {
      console.log(info.name, info.age, info.message)
      info.flag = "已经打印结束"
      address = info.address
    }

    var obj = {
      name: "pure function",
      age: 18,
      message: "pure function(纯函数)"
    }

    printInfo(obj)

    
  </script>
  
</body>
</html>